package com.arithmetic.basics;

/**
 * 给定一个二叉树 root ，返回其最大深度。
 * <p>
 * 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
 * <p>
 * 示例 1：
 * 输入：root = [3,9,20,null,null,15,7]
 * 输出：3
 * 示例 2：
 * <p>
 * 输入：root = [1,null,2]
 * 输出：2
 * 提示：
 * <p>
 * 树中节点的数量在 [0, 104] 区间内。
 * -100 <= Node.val <= 100
 * Related Topics
 * 树
 * 深度优先搜索
 * 广度优先搜索
 * 二叉树
 */
public class Day29 {
    public int maxDepth(TreeNode root) {
        // 如果返回当前节点为空，返回深度0
        if (root == null) {
            return 0;
        }
        // 递归计算左子树和右子树的最大深度
        // 取左右子树深度的最大值，再加1（当前节点）
        int lLen = maxDepth(root.left), reln = maxDepth(root.right);
        return Math.max(lLen, reln) + 1;
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
}


